﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Dominio.Entidades;
using System.Diagnostics;
using System.Linq.Expressions;
using Util;

/// <summary>
/// Summary description for Festivos_DLL
/// </summary>
namespace Dominio.Negocio
{
    public class Festivos_DLL : Disposable
    {
        VacacionesDataContext db = new VacacionesDataContext();
        bool _disposed;

        public List<Festivo> ListaFestivos(int anyo, int? idEdificio, int mes) 
        {
            db.Log = Console.Out;
            List<Festivo> listFestivos;
            if (idEdificio == null)
            {
                listFestivos = db.Festivos.Where(c => c.Anyo == anyo && c.Dia.Month == mes).OrderBy(c=>c.Dia).ToList();
            }
            else 
            {
                listFestivos = db.Festivos
                    .Where(c=> c.Anyo == anyo && (c.IdEdificio == idEdificio || c.IdEdificio == null) && c.Dia.Month == mes)
                    .OrderBy(c => c.Dia).ToList();
                    /*(from c in db.Festivos
                                    where c.Anyo == anyo
                                    && (c.IdEdificio == idEdificio || c.IdEdificio == null )
                                    && c.Dia.Month == mes
                                    orderby c.Dia
                                    select c).ToList()*/;
            }
          /*  Debug.Write(db.GetCommand((from c in db.Festivos
                                       where c.Anyo == anyo
                                       && c.IdEdificio == idEdificio
                                       && c.Dia.Month == mes
                                       orderby c.Dia
                                       select c)).CommandText);*/
          
                
            return listFestivos;
        }

        public List<Festivo> ListaFestivos(int anyo, int? idEdificio) 
        {
            var lFestivos= db.Festivos
                .Where ( c=> c.Anyo == anyo && ( c.IdEdificio == idEdificio || c.IdEdificio == null))
                .OrderBy(c => c.Dia)
                .ToList();
            return lFestivos; 
        }

        public List<Festivo> ListaFestivos(int anyo)
        {

            var listFestivos = db.Festivos.Where(c => c.Anyo == anyo).OrderBy(c => c.Dia).ToList();
/*(from c in db.Festivos
                                where c.Anyo == anyo
                                orderby c.Dia
                                select c).ToList();*/

            return listFestivos;
        }

        public void GuardaFestivo(DateTime dia, int anyo, int? idEdificio, int idTipoFestivo) 
        {
            
            db.P_InsertaFestivos(dia, idTipoFestivo, idEdificio, anyo);
          
            db.SubmitChanges();
        }

        #region Métodos sobreescritos
        /// <summary>
        /// Método sobrecargado de Dispose que será el que
        /// libera los recursos, controla que solo se ejecute
        /// dicha lógica una vez y evita que el GC tenga que
        /// llamar al destructor de clase.
        /// </summary>
        /// <param name=”bool”></param>
        protected override void Dispose(bool disposing)
        {
            if (_disposed)
                return;

            if (disposing)
            {
                // free other managed objects that implement
                // IDisposable only
                if (db != null)
                    db.Dispose();
            }

            // release any unmanaged objects
            // set the object references to null

            _disposed = true;
        }
        #endregion
    }
}